package modelo.configuraciones;

import java.io.File;
import java.util.Iterator;
import java.util.List;

import modelo.geografia.Ciudad;
import modelo.objeto.Comun;
import modelo.objeto.MuyValioso;
import modelo.objeto.ObjetoRobado;
import modelo.objeto.Valioso;

import org.dom4j.Document;
import org.dom4j.Element;
import org.dom4j.DocumentException;
import org.dom4j.io.SAXReader;


public class LectorCiudadesYObjetosXML implements FuenteDeCiudadesYObjetos{
	
	private static LectorCiudadesYObjetosXML instancia= null;
	
	private synchronized static void crearInstancia(){
		if (instancia == null ) {
			instancia = new LectorCiudadesYObjetosXML();
		}
	}
	public static LectorCiudadesYObjetosXML obtenerInstancia(){
		if (instancia == null){
			crearInstancia();
		}
		return instancia;
	}
	
	public void obtenerCiudadesYObjetos(File input, List<ObjetoRobado> objetos, List<Ciudad> ciudades) throws DocumentException {
        SAXReader reader = new SAXReader();
        Document document = null;
		document = reader.read(input);
        List<?> list = document.selectNodes("//CiudadesYObjetos/Ciudad");
        Iterator<?> i = list.iterator();
        while(i.hasNext()){
        	Element element = (Element)i.next();
        	Iterator<?> j = element.elementIterator("nombre");
        	String nombreCiudad="", latitud="", longitud="", nombreObjeto="", tipo="";
        	while(j.hasNext()){
        		Element titleElement=(Element)j.next();
        		nombreCiudad=titleElement.getText();
        	}
        	j = element.elementIterator("latitud");
        	while(j.hasNext()){
        		Element titleElement=(Element)j.next();
        		latitud=titleElement.getText();
        	}
        	j = element.elementIterator("longitud");
        	while(j.hasNext()){
        		Element titleElement=(Element)j.next();
        		longitud=titleElement.getText();
        	}
        	Ciudad nuevoCiudad = new Ciudad(nombreCiudad, latitud, longitud);
        	ciudades.add(nuevoCiudad);
        	j = element.elementIterator("objeto");
        	while(j.hasNext()){
        		Element elementObj = (Element)j.next();
            	Iterator<?> k = elementObj.elementIterator("nombre");
            	while(k.hasNext()){
            		Element titleElement=(Element)k.next();
            		nombreObjeto=titleElement.getText();
            	}
            	k = elementObj.elementIterator("tipo");
            	while(k.hasNext()){
            		Element titleElement=(Element)k.next();
            		tipo=titleElement.getText();
            	}
            	ObjetoRobado nuevoObjeto=null;
            	if (tipo.equals("Comun")) {nuevoObjeto = new Comun(nombreObjeto, nuevoCiudad);}
            	if (tipo.equals("Valioso")) {nuevoObjeto = new Valioso(nombreObjeto, nuevoCiudad);}
            	if (tipo.equals("Muy Valioso")) {nuevoObjeto = new MuyValioso(nombreObjeto, nuevoCiudad);}
            	objetos.add(nuevoObjeto);
        	}
        }
    }	
	public String obtenerDescripcionCiudad(File input,String nombreCiudad) throws DocumentException{
		SAXReader reader = new SAXReader();
        Document document=null;
		document = reader.read(input);
		List<?> list = document.selectNodes("//Ciudades/Ciudad");
        Iterator<?> i = list.iterator();
        String descripcion = "";
        while(i.hasNext()){
        	Element element = (Element)i.next();
        	Iterator<?> j = element.elementIterator("nombre");
        	while(j.hasNext()){
        		Element titleElement=(Element)j.next();
        		if (titleElement.getText().toUpperCase().equals(nombreCiudad.toUpperCase())) {
        			Iterator<?> k = element.elementIterator("info");
                	while(k.hasNext()){
                		Element info = (Element)k.next();
                		descripcion = info.getText();
                	}
        		}
        	}
        }
        return descripcion;
	}
	public String obtenerImagenCiudad(File input,String nombreCiudad) throws DocumentException{
		SAXReader reader = new SAXReader();
		Document document=null;
		document = reader.read(input);
		List<?> list = document.selectNodes("//Ciudades/Ciudad");
		Iterator<?> i = list.iterator();
		String rutaImagen = "";
		while(i.hasNext()){
			Element element = (Element)i.next();
			Iterator<?> j = element.elementIterator("nombre");
			while(j.hasNext()){
				Element titleElement=(Element)j.next();
				if (titleElement.getText().toUpperCase().equals(nombreCiudad.toUpperCase())) {
					Iterator<?> k = element.elementIterator("foto");
					while(k.hasNext()){
						Element ruta = (Element)k.next();
						rutaImagen = ruta.getText();
					}
				}
		  	}
		}
		return rutaImagen;
	}
}
